<?php

namespace app\common\model;

use houdunwang\arr\Arr;
use think\Db;
use think\Loader;
use think\Model;
use think\Validate;
use houdunwang\crypt;

/**
 *  Category 分类模型
 * Class Category
 * @package app\common\model
 */
class Category extends Model
{
    //类型tid
    protected $pk = 'cid';
    //获取当前的数据表
    protected $table = 'shop_category';

    //类型首页
    public function lists()
    {
        /**
         * data                    操作的数组
         * pid                    父级栏目的 id 值
         * html                    栏目名称前缀，用于在视图中显示层次感的栏目列表
         * fieldPri                唯一键名，如果是表则是表的主键
         * fieldPid                父 ID 键名
         */
        return Arr::tree(db('category')->select(), 'cname', $fieldPri = 'cid', $fieldPid = 'pid');
    }

    /**
     * 寻找子集数据
     */
    public function getSon($cid, $data)
    {
        static $temp = [];
        foreach ($data as $k => $v) {
            if ($cid == $v['pid']) {
                $temp[] = $v['cid'];
                $this->getSon($v['cid'], $data);
            }
        }
        return $temp;
    }


    //添加父级分类
    public function addTop($data)
    {
        $data['pid'] = 0;
        //执行添加 滤非数据表字段的数据
        $result = $this->validate(true)->save($data);
        //p($result);die; //false ，执行成功返回 1 为true  一下判断拿false做判断
        if (false === $result) {
            //错误信息
            return ['valid' => 0, 'msg' => $this->getError()];
        } else {
            //成功信息
            return ['valid' => 1, 'msg' => '添加成功'];
        }
    }

    //添加子级分类
    public function addSon($data)
    {
        $result = $this->validate(true)->save($data);
        //p($result);die; //false ，执行成功返回 1 为true  一下判断拿false做判断
        if (false === $result) {
            //错误信息
            return ['valid' => 0, 'msg' => $this->getError()];
        } else {
            //成功信息
            return ['valid' => 1, 'msg' => '添加成功'];
        }
    }

    //类型的删除
    public function del($cid)
    {
        //2.判断删除操作  如果有子集不允许删除
//        p($this->where('cid',$cid)->select());die;
        if ($this->where('pid', $cid)->select()) {
//            //3.将错误信息存入到模型中
            return ['valid' => 0, 'msg' => '请先删除子目录'];
        }
        //4. 删除当前的数据对象
        $result = Db::table('shop_category')->where('cid', $cid)->delete();
        if (false === $result) {
            // 验证失败 输出错误信息
            return ['valid' => 0, 'msg' => $this->getError()];
            //dump($this->getError());
        } else {
            return ['valid' => 1, 'msg' => '删除成功'];
        }
    }

    //类型的编辑
    public function edit($data)
    {
//        p($data);die;
        $result = $this->validate(true)->save($data, [$this->pk => $data['cid']]);
//        p($result);die;
        if ($result) {
            //执行成功
            return ['valid' => 1, 'msg' => '编辑成功'];
        } else {
            return ['valid' => 0, 'msg' => $this->getError()];
        }
    }
}
